/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package builder;
import stubs.persistencia.StubCntrPersistencia;
import stubs.negocio.StubCntrGerenciaCidade;
import stubs.negocio.StubCntrGerenciaCliente;
import stubs.negocio.StubCntrGerenciaReserva;
import stubs.negocio.StubCntrGerenciaAeroporto;
import stubs.negocio.StubCntrGerenciaFuncionario;
import stubs.negocio.StubCntrGerenciaVoo;
import controladoras.apresentacao.CntrIntAeroporto;
import controladoras.apresentacao.CntrIntAutenticacao;
import controladoras.apresentacao.CntrIntCidade;
import controladoras.apresentacao.CntrIntCliente;
import controladoras.apresentacao.CntrIntFuncionario;
import controladoras.apresentacao.CntrIntReserva;
import controladoras.apresentacao.CntrIntVoo;
import controladoras.negocio.CntrGerenciaAeroporto;
import controladoras.negocio.CntrGerenciaCidade;
import controladoras.negocio.CntrGerenciaCliente;
import controladoras.negocio.CntrGerenciaFuncionario;
import controladoras.negocio.CntrGerenciaReserva;
import controladoras.negocio.CntrGerenciaVoo;
import controladoras.persistencia.CntrPersistenciaHSQLDB;


/**
 * Builder do sistema.
 * @author thiagostuckert
 * @author daniel
 */
public class Builder {

    /**
     * Metodo que instancia as contralodoras de interação e negócio.
     * @return CntrIntAutenticacao para ser executada pela main.
     */
    public static CntrIntAutenticacao build() {
        try {
         final boolean stubNegocio  = false;
         final boolean stubPersistencia = false;
        /**
         * instanciação das controladoras de interacao.
         */
        CntrIntAeroporto cntrIntAeroporto = CntrIntAeroporto.instanciar();
        CntrIntAutenticacao cntrIntAutenticacao =
                CntrIntAutenticacao.instanciar();
        CntrIntCidade cntrIntCidade = CntrIntCidade.instanciar();
        CntrIntCliente cntrIntCliente = CntrIntCliente.instanciar();
        CntrIntFuncionario cntrIntFuncionario = CntrIntFuncionario.instanciar();
        CntrIntReserva cntrIntReserva =  CntrIntReserva.instanciar();
        CntrIntVoo cntrIntVoo = CntrIntVoo.instanciar();

        /**
         * instanciação das controladoras de negocio.
         */
        CntrGerenciaAeroporto cntrGerenciaAeroporto =
                CntrGerenciaAeroporto.instanciar();
        CntrGerenciaCidade cntrGerenciaCidade =
                CntrGerenciaCidade.instanciar();
        CntrGerenciaCliente cntrGerenciaCliente =
                CntrGerenciaCliente.instanciar();
        CntrGerenciaFuncionario cntrGerenciaFuncionario =
                CntrGerenciaFuncionario.instanciar();
        CntrGerenciaReserva cntrGerenciaReserva =
                CntrGerenciaReserva.instanciar();
        CntrGerenciaVoo cntrGerenciaVoo = CntrGerenciaVoo.instanciar();

        /**
         * instanciação da controladora de persistência.
         */
        CntrPersistenciaHSQLDB cntrPersitencia =
                CntrPersistenciaHSQLDB.instanciar();

        /**
         * instanciação dos stubs.
         */
        StubCntrGerenciaAeroporto stubCntrGerenciaAeroporto =
                new StubCntrGerenciaAeroporto();
        StubCntrGerenciaCidade stubCntrGerenciaCidade =
                new StubCntrGerenciaCidade();
        StubCntrGerenciaCliente stubCntrGerenciaCliente =
                new StubCntrGerenciaCliente();
        StubCntrGerenciaFuncionario stubCntrGerenciaFuncionario =
                new StubCntrGerenciaFuncionario();
        StubCntrGerenciaReserva stubCntrGerenciaReserva =
                new StubCntrGerenciaReserva();
        StubCntrGerenciaVoo stubCntrGerenciaVoo =
                new StubCntrGerenciaVoo();

        StubCntrPersistencia stubCntrPersistencia = new StubCntrPersistencia();

        /**
         * Set as controladoras de negocio das Controladoras de interacao.
         */
        if (stubNegocio) {
            cntrIntAeroporto.setCntrGerenciaAeroporto(
                    stubCntrGerenciaAeroporto);
            cntrIntCidade.setCntrGerenciaCidade(stubCntrGerenciaCidade);
            cntrIntCliente.setCntrCadastroCliente(stubCntrGerenciaCliente);
            cntrIntFuncionario.setCntrCadastroFuncionario(
                    stubCntrGerenciaFuncionario);
            cntrIntReserva.setCntrGerenciaReserva(stubCntrGerenciaReserva);
            cntrIntVoo.setCntrCadastroVoo(stubCntrGerenciaVoo);
        } else {
            cntrIntAeroporto.setCntrGerenciaAeroporto(cntrGerenciaAeroporto);
            cntrIntCidade.setCntrGerenciaCidade(cntrGerenciaCidade);
            cntrIntCliente.setCntrCadastroCliente(cntrGerenciaCliente);
            cntrIntFuncionario.setCntrCadastroFuncionario(
                    cntrGerenciaFuncionario);
            cntrIntReserva.setCntrGerenciaReserva(cntrGerenciaReserva);
            cntrIntVoo.setCntrCadastroVoo(cntrGerenciaVoo);
        }

        /**
         * Set as controladoras de persistência das Controladoras de negócio.
         */
        if (stubPersistencia) {
            cntrGerenciaAeroporto.setCntrPersistencia(stubCntrPersistencia);
            cntrGerenciaCidade.setCntrPersistencia(stubCntrPersistencia);
            cntrGerenciaCliente.setCntrPersistencia(stubCntrPersistencia);
            cntrGerenciaFuncionario.setCntrPersistencia(stubCntrPersistencia);
            cntrGerenciaReserva.setCntrPersistencia(stubCntrPersistencia);
            cntrGerenciaVoo.setCntrPersistencia(stubCntrPersistencia);
        } else {
            cntrGerenciaAeroporto.setCntrPersistencia(cntrPersitencia);
            cntrGerenciaCidade.setCntrPersistencia(cntrPersitencia);
            cntrGerenciaCliente.setCntrPersistencia(cntrPersitencia);
            cntrGerenciaFuncionario.setCntrPersistencia(cntrPersitencia);
            cntrGerenciaReserva.setCntrPersistencia(cntrPersitencia);
            cntrGerenciaVoo.setCntrPersistencia(cntrPersitencia);
        }

        return (cntrIntAutenticacao);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

}
